home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power Programmierung
/
Power-Programmierung (Tewi)(1994).iso
/
magazine
/
progjour
/
1988
/
06
/
dsi020
/
gettim28.asm
< prev
next >
Wrap
Assembly Source File
|
1988-07-27
|
2KB
|
93 lines
; GETTIM.ASM
;
; Author: M. Steven Baker
; Date: July 29, 1988
;
; GETTIM and GETDAT routines for SVS FORTRAN (only)
; must be called with INTEGER*4 arguments
;
; FORTRAN CODE TO RUN THIS:
;; EXTERNAL GETTIM
;; EXTERNAL GETDAT
;; INTEGER IHR,IMIN,ISEC,IS100
;; INTEGER IMON,IDAY,IYR
;; CALL GETDAT(IYR,IMON,IDAY)
;; CALL GETTIM(IHR,IMIN,ISEC,IS100)
;; END
;
; Written for the SVS assembler (ASM68K.E20)
; by M. Steven Baker (Technical Editor -- Programmer's Journal)
;
; note: since dumb SVS assembler doesn't support
; EXTB.L D0
; we use
; ANDI #$FF,D0
; EXT.L D0
;
;
; NOTE:
; USE WITH SVS VERSION 2.8 ONLY. USE WITH SVS VERSION 2.6
; REQUIRES THAT THE +e(?? C calling convention)
; COMPILER SWITCH BE USED.
;
global getdat,gettim
;
; return date in MM/DD/YY format
;
getdat MOVEQ #27,D0 ; GET DATE
TRAP #14 ; D0=YYYY:MM:DD
MOVE.L D0,D1 ; SAVE REGISTER
MOVE.L 8(SP),A0 ; GET POINTER TO ARGUMENT
ASR.W #8,D0 ; SHIFT IN MONTH
EXT.L D0 ; extend to a long word
MOVE.L D0,(A0) ; store month
;
MOVE.L D1,D0 ; GET YEAR
SWAP D0 ; INTO LOW WORD
EXT.L D0 ; extend to a long word
MOVE.L 4(SP),A0 ; GET POINTER TO ARGUMENT
MOVE.L D0,(A0) ; store year
;
CLR.L D0 ; clear register
MOVE.B D1,D0 ; get day
MOVE.L 12(SP),A0 ; GET POINTER TO ARGUMENT
MOVE.L D0,(A0) ; store day
RTS ; just return for 2.8
; RTD #12 ; RETURN AND DEALLOCATE PARAMETERS for 2.6
;
; return time in HH:MM:SS format
;
gettim MOVEQ #28,D0 ; GET TIME
TRAP #14 ; D0=HH:MM:SS:xx
MOVE.L D0,D1 ; SAVE REGISTER
SWAP D0 ; get hour to low word
ASR.W #8,D0 ; SHIFT IN hour
EXT.L D0 ; extend to a long word
MOVE.L 4(SP),A0 ; GET POINTER TO ARGUMENT
MOVE.L D0,(A0) ; store hour
;
MOVE.L D1,D0 ; now get minutes
SWAP D0 ; INTO LOW WORD
ANDI #$FF,D0 ; screen out all but low byte
EXT.L D0 ; extend to a long word
MOVE.L 8(SP),A0 ; GET POINTER TO ARGUMENT
MOVE.L D0,(A0) ; store year
;
MOVE.L D1,D0 ; now get seconds
ASR.W #8,D0 ; SHIFT seconds into low byte
EXT.L D0 ; extend to a long word
MOVE.L 12(SP),A0 ; GET POINTER TO ARGUMENT
MOVE.L D0,(A0) ; store seconds
;
MOVE.L D1,D0 ; now get 1/100 seconds
ANDI #$FF,D0 ; screen out all but low byte
EXT.L D0 ; extend to a long word
MOVE.L 16(SP),A0 ; GET POINTER TO ARGUMENT
MOVE.L D0,(A0) ; store 1/100 seconds
RTS ; just return for 2.8
;
; RTD #16 ; return and deallocate for 2.6
;
END